package com.project.collectAPI.comm;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.Synchronized;

import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

public class JsonParser {

   /* public static void main(String[] args) {
        String jsonStr = "YOUR_JSON_HERE";
        Object obj = JSON.parse(jsonStr);
        JSONObject jsonObject = JSONObject.parseObject(jsonStr);
        JsonParser.traverseJson(jsonObject);
    }*/

    public static Map<String,Object> getAllJsonObject=new HashMap<>();



    /**
     * 将对象转json
     * */
    public static void parseJson(Object obj) {
        if (obj instanceof JSONObject) {
            JSONObject jsonObj = (JSONObject) obj;
            for (String key : jsonObj.keySet()) {
                Object value = jsonObj.get(key);
                System.out.println(key + ": " + value.toString());
                parseJson(value);
            }
        } else if (obj instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) obj;
            for (int i = 0; i < jsonArray.size(); i++) {
                Object value = jsonArray.get(i);
                parseJson(value);
            }
        }
    }


    /**
     * 遍历json对象
     * synchronized 防止线程争夺，导致数据不一致
     * */
    public static synchronized void traverseJson(JSONObject jsonObj) {
        for (String key : jsonObj.keySet()) {
            Object obj = jsonObj.get(key);
            if (obj instanceof JSONObject) {
                //System.out.println(key+"==>Json对象==========================>"+obj + " : ");
                JsonParser.getAllJsonObject.put(key,obj);  //存放数据集合
                traverseJson((JSONObject) obj);
            } else if (obj instanceof JSONArray) {
                //System.out.println(key + " : ------->");
                JSONArray jsonArray = (JSONArray) obj;
                //System.out.println(key+"==> 子组 : ==>"+obj);
                JsonParser.getAllJsonObject.put(key,obj);  //存放数据集合
                for (Object o : jsonArray) {
                    if (o instanceof JSONObject) {
                        traverseJson((JSONObject) o);
                    } else {
                        //System.out.println(o);
                    }
                }
            } else {
                //System.out.println(key + " : " + (Objects.isNull(obj) ? "空" : obj));
            }
        }
    }
}
